﻿using System;
using System.Linq;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using DbTaglio.SvcLayer;
using DbTaglio.SvcLayer.DbTaglioService;

namespace Gucci.DbTaglio.Site.Wp.Operatori_dbtWp
{
    [ToolboxItem(false)]
    public partial class Operatori_dbtWp : System.Web.UI.WebControls.WebParts.WebPart
    {
        MetGet _proxy = null;
        string _idargs = "", _codfornitore = "", _descrizione = "", _codice = "", _codMateriale = "", _spUserName = "";
        DBTWinLogin _loginUserData = null;
        SPUser _spUser = null;
        bool _isAbilitatoAlConsumo = false, _isAdmin = false;
       
        
        # region LOGIN - DATI UTENTE

        DBTManager _manager = null;

        private string getSPuser()
        {
            _spUser = SPContext.Current.Web.CurrentUser;

            var arr = _spUser.Name.Split(new[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (arr != null && arr.Length > 1)
                _spUserName = arr[1];

            return _spUserName;
        }

        #endregion

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

            _manager = new DBTManager(getSPuser());
            var result = _manager.EnsureLogin(HiddenCodiceFornitore.Value, HiddenIsAdmin.Value);

            if (result.HaErrori)
            {
                LabelErrori.Text = result.Eccezione.Message;
                return;
            }

            if (!Page.IsPostBack)
            {
                try
                {
                    loadDatiDrop();
                    loadDati();
                }
                catch (Exception ex)
                {
                    LabelErrori.Text = ex.Message;
                }

            }           
        }

        

        private void loadDati()
        {
            var result = _manager.ProxyGetWcf.getOperatori(new DBTGenFiter() { CodiceForn = _manager.CodFornitore });

            if (result.HaErrori)
            {
                LabelErrori.Text = result.Eccezione.Message;
            }
            else
            { 
                ListView1.DataSource = null;
                ListView1.DataSource = result.Dati;
                ListView1.DataBind();
            }
        }


        public void loadDatiDrop()
        {

            var result = _manager.ProxyGetWcf.getTerzisti(true);

            _manager.setDropDownSingleVal<Terzista>(
                  new RetData<Terzista>(_manager.DatiUtenteLogin.Dati.DatiFornitore), DropFind_Fornitore,
                 _manager.DatiUtenteLogin.Dati.DatiFornitore.RagioneSocialeTerzista,
                 _manager.DatiUtenteLogin.Dati.DatiFornitore.CodiceTerzista, LabelErrori);

            _manager.setDropDownSingleVal<Terzista>(
                 new RetData<Terzista>(_manager.DatiUtenteLogin.Dati.DatiFornitore), DropNew_Fornitore,
                _manager.DatiUtenteLogin.Dati.DatiFornitore.RagioneSocialeTerzista,
                _manager.DatiUtenteLogin.Dati.DatiFornitore.CodiceTerzista, LabelErrori);

        }
        
        protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void Azioni_Click(object sender, ImageClickEventArgs e)
        {
            var btn = (ImageButton)sender;
            var azione = btn.CommandName;
            
            switch (azione)
            {
                case "New":
                    AddNewItem();
                    break;
                case "Save":
                    _idargs = HiddenNewId.Value;
                    updateItem(false);
                    break;
                case "Mod":
                    _idargs = btn.CommandArgument; //idOperatore
                    prelevaedEsponiDatiPerModifica();
                    break;
                case "Del":
                    updateItem(true);
                    break;
                case "Ret":
                    setInModifica(false);
                    break;
                case "Find":
                    getDatiForm();
                    break;
                case "Ref":
                    loadDati();
                    break;
                default:
                    break;
            }


        }

        private void AddNewItem()
        {
            setInModifica(true);
            
            TextNew_Codice.Text = "";
            TextNew_Nome.Text = "";

            _idargs = "";
            HiddenNewId.Value = "";
        }


        private void updateItem(bool pDelete)
        {
            MetSet wcf = new MetSet(null, null);

            if (string.IsNullOrEmpty(TextNew_Nome.Text))
            {
                LabelErrori.Text = "Inserire il Nome Operatore ";
                return;
            }
            if (string.IsNullOrEmpty(TextNew_Codice.Text))
            {
                LabelErrori.Text = "Inserire il Codice Operatore ";
                return;
            }

            if (DropNew_Fornitore.SelectedValue == null ||
              DropNew_Fornitore.SelectedValue == "-1")
            {
                LabelErrori.Text = "Scegliere un fornitore ";
                return;
            }


            try
            {
                //  item
                var item = new Operatore();
                item.CodiceOperatore = TextNew_Codice.Text;
                item.NomeOperatore = TextNew_Nome.Text;
                item.CodiceFornitore = DropNew_Fornitore.SelectedValue;

                item.IsDeleted = pDelete;

                //AZIONE
                var result = wcf.updateOperatore(item, false);
                //RESULT
                if (result.Dati.IsError)
                    LabelErrori.Text = "Errore : Dati non inseriti";
                else
                    LabelErrori.Text = string.Format("OK {0} ", pDelete ? "Cancellazione eseguita " : "Dati inseriti");

                LabelErrori.Text += "   [ " + DateTime.Now.ToShortTimeString();


            }
            catch (Exception ex)
            {
                LabelErrori.Text = "Errore : " + ex.Message;
            }



        }

        private void getDatiForm()
        {
            _codice = TextFInd_ID.Text.Trim();
            _descrizione = TextFind_Nome.Text.Trim();
            _codfornitore = DropFind_Fornitore.SelectedValue;

            prelevaedEsponiDatiPerModifica();

        }

        //preleva tutti i dati e li espone per la modifica
        // necessita di _IDArgs
        private void prelevaedEsponiDatiPerModifica()
        {
            //non metere sotto !!
            setInModifica(true);

            TextNew_Codice.Text = "";
            TextNew_Nome.Text = ""; 

            try
            {
                //preleva i  dati ricavandoli da id o da ragsoc e li espone per la modifica
                var result = findSingleItem();

                if (result.HaErrori)
                {
                    LabelErrori.Text = "Errore : \r\n" + result.Eccezione.Message;
                }
                else if (result.IsNull)
                {
                    LabelErrori.Text = "Nessun dato trovato !";
                }
                else
                {
                    _codice = result.Dati.CodiceOperatore;
                    _idargs = result.Dati.IdOperatore.ToString();
                    _descrizione = result.Dati.NomeOperatore;

                    TextNew_Codice.Text = _codice;
                    TextNew_Nome.Text = result.Dati.NomeOperatore;
                    HiddenNewId.Value = _idargs;
                    
                    // IL fornitore reswta fisso !!!!
                    //DropNew_Fornitore.Items.FindByValue("-1").Selected = false;
                    //DropNew_Fornitore.Items.FindByValue(result.Dati.CodiceFornitore).Selected = true;    
                }
            }
            catch (Exception ex)
            {
                LabelErrori.Text = ex.Message;
            }
                       
        }

        private RetData<Operatore> findSingleItem()
        {
            int id = 0;
            int.TryParse(_idargs, out id);

            var res = _manager.ProxyGetWcf.getOperatori(new DBTGenFiter ()
            {
                CodiceForn  = _manager.CodFornitore,
                ID = id,
                Codice = _codice,
                Descr = _descrizione
            });

            if (res.HaErrori)
            {
                LabelErrori.Text = "Errore nel prelievo Operatori\r\n"+ res.Eccezione.Message;
                return new RetData<Operatore>(res.Eccezione);
            }

            return new RetData<Operatore>(res.Dati.FirstOrDefault());


        }//fM

        private void setInModifica(bool pMod)
        {
            MultiView1.SetActiveView(pMod ? View2 : View1);
            butSave.Enabled = pMod;
            butDel.Enabled = pMod;

            // Il fornitore reta fisso
            //var selVal =DropNew_Fornitore.SelectedValue;
            //DropNew_Fornitore.Items.FindByValue(selVal).Selected = false;
            //DropNew_Fornitore.Items.FindByValue("-1").Selected = true;



            if (pMod)
            {
                LabelErrori.Text = "";               
            }
        }

        protected void DataPagerProducts_PreRender(object sender, EventArgs e)
        {
          
        }

        protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
        {
            DataPager1.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
            loadDati();
        }





    }

}
